package com.sanniu;

import com.jfinal.aop.Aop;
import com.jfinal.weixin.sdk.api.ApiConfig;
import com.jfinal.weixin.sdk.api.ApiConfigKit;
import com.jfinal.wxaapp.WxaConfig;
import com.jfinal.wxaapp.WxaConfigKit;
import com.sanniu.common.Consts;
import com.sanniu.common.Options;
import com.sanniu.common.PermissionManager;
import com.sanniu.core.Installer;
import com.sanniu.model.Option;
import com.sanniu.service.OptionService;
import io.jboot.components.event.JbootEvent;
import io.jboot.components.event.JbootEventListener;
import io.jboot.utils.StrUtil;

import java.util.List;

public class OptionInitializer implements Options.OptionChangeListener, JbootEventListener {

    private static OptionInitializer me = new OptionInitializer();

    private OptionInitializer() {

    }

    public static OptionInitializer me() {
        return me;
    }

    public void init() {

        if (Installer.notInstall()) {
            Installer.addListener(this);
            return;
        }

        OptionService service = Aop.get(OptionService.class);
        System.out.println(service);


        List<Option> options = service.findAll();
        System.out.println(options);
        for (Option option : options) {
            //整个网站的后台配置不超过100个，再未来最多也100多个，所以全部放在内存毫无压力
            Options.set(option.getKey(), option.getValue());
        }
        PermissionManager.me().init();


        initWechatOption();// 初始化 微信公众号 的配置

        initWechatMiniProgramOption();// 初始化 微信小程序 的配置

        Options.addListener(this);

    }


    /**
     * 设置微信的相关配置
     */
    private void initWechatOption() {

//        String appId = JPressOptions.get(JPressConsts.OPTION_WECHAT_APPID);
//        String appSecret = JPressOptions.get(JPressConsts.OPTION_WECHAT_APPSECRET);
//        String token = JPressOptions.get(JPressConsts.OPTION_WECHAT_TOKEN);
//
//        if (StrUtil.areNotEmpty(appId, appSecret, token)) {
//            // 配置微信 API 相关参数
//            ApiConfig ac = new ApiConfig();
//            ac.setAppId(appId);
//            ac.setAppSecret(appSecret);
//            ac.setToken(token);
//            ac.setEncryptMessage(false); //采用明文模式，同时也支持混合模式
//
//            ApiConfigKit.putApiConfig(ac);
//        }
//
//        WechatInterceptor.init();

    }

    private void initWechatMiniProgramOption() {


        String miniProgramAppId = Options.get(Consts.OPTION_WECHAT_MINIPROGRAM_APPID);
        String miniProgramAppSecret = Options.get(Consts.OPTION_WECHAT_MINIPROGRAM_APPSECRET);
//        String miniProgramToken = JPressOptions.get(JPressConsts.OPTION_WECHAT_MINIPROGRAM_TOKEN);

        if (StrUtil.areNotEmpty(miniProgramAppId, miniProgramAppSecret)) {
            WxaConfig wxaConfig = new WxaConfig();
            wxaConfig.setAppId(miniProgramAppId);
            wxaConfig.setAppSecret(miniProgramAppSecret);
//            wxaConfig.setToken(miniProgramToken);
            wxaConfig.setMessageEncrypt(false); //采用明文模式，同时也支持混合模式

            WxaConfigKit.setWxaConfig(wxaConfig);
        }

    }


    @Override
    public void onChanged(String key, String newValue, String oldValue) {
        switch (key) {

        }
    }

    @Override
    public void onEvent(JbootEvent jbootEvent) {
        init();
    }
}
